\normalsize
STCG es una generador de casos de prueba para relaciones SQL.


Para poder utilizarlo primero has de instalarlo siguiendo los pasos de la sección de instalación.


Si ya lo tienes instalado puedes ver la sección de ejecución para consultar las opciones y funcionalidades de STCG.

\section{Instalación}

\subsection{Hazte con la herramienta}\label{app:download}
\begin{itemize}
\item Puedes descargarte la última versión de STCG ejecutable en linux en la siguiente página:
 \cod{http://gpd.sip.ucm.es/trac/gpd/wiki/GpdSystems/STCG}
\item Si lo prefieres puedes obtener el código del proyecto desde el repositorio de subversion del proyecto:
 \cod{svn checkout http://stcg.googlecode.com/svn/trunk/ stcg-read-only}

Para compilarlo en linux:
\begin{itemize}
\item Muévete a la carpeta de STCG.
\item Haz \cod{make; sudo make install} en la consola de comandos.
\end{itemize}
\end{itemize}
\subsection{También puedes necesitar}
\begin{itemize}
\item STCG genera código \emph{MiniZinc} \cite{MiniZinc} para representar las restricciones que deben satisfacer los casos de prueba buscados. Para poder obtener resultados necesitas ejecutar MiniZinc, podrás encontrarlo en su página web: \cod{http://www.g12.csse.unimelb.edu.au/MiniZinc/ }
\item Si lo que quieres es \emph{compilar} el código también necesitarás:
\begin{itemize}
\item \emph{GNU Bison}: \cod{http://www.gnu.org/software/bison/ }
\item \emph{Flex}: \cod{http://flex.sourceforge.net/ }
\item \emph{g++} u otro compilador de C++ a tu elección.
\end{itemize}
\end{itemize}


\section{Ejecución}

Si ya tienes instalado STCG podrás ejecutarlo desde la consola de comandos.

\subsection{Obtener ayuda y forma de uso}

Puedes obtener ayuda directamente de la herramienta ejecutando 
\cod{stcg --help} o \cod{stcg -?}
Esto indicará las opciones disponibles y su significado.

También puedes ejecutar
\cod{stcg --usage}
para obtener una breve descripción de la forma de uso de la herramienta.

\subsection{Obtener casos de prueba}

STCG obtiene casos de prueba para una determinada relación SQL, para ello necesita:
\begin{itemize}
\item La descripción de la base de datos a estudiar, o al menos de las vistas y tablas relacionadas con la relación objetivo, a través del código SQL que las describe. Esto puede hacerse de dos formas:
\begin{itemize}
\item Ejecutando STCG con la opción --input o -i indicando el nombre del archivo con el código SQL:
\cod{stcg --input entrada.sql} o \cod{stcg -i entrada.sql}
\item Escribiendo desde la entrada de texto de la consola el código SQL que define las relaciones que se quieren estudiar. Para terminar la entrada de datos hay que indicar el final de fichero. Esto puede hacerse mediante la combinación Ctrl+D.
\end{itemize}
\item el nombre de la tabla o vista para la cual se quiere obtener el caso de prueba. Esto puede especificarse de dos maneras:
\begin{itemize}
\item Utilizando la opción --formula o -f:
 \cod{stcg --formula Nombre-Relacion} o  \cod{stcg -f Nombre-Relacion}
\item Si no se utilizó la opción -f la herramienta preguntará el nombre de la relación una vez procesada la entrada de código SQL que define la base de datos.
\end{itemize}
\item El máximo número de filas por cada tabla implicada en el caso de prueba. La herramienta preguntará al usuario estos datos.
\end{itemize}

Una vez que la herramienta dispone de estos datos proporcionará el caso de prueba en forma de código MiniZinc. Dependiendo de las opciones indicadas la salida tendrá las siguientes características:
\begin{itemize}
\item Si se especifica la opción --output salida.mzn o -o salida.mzn la salida se escribirá en el archivo especificado:
\cod{stcg --output salida.mzn} o \cod{stcg -o salida.mzn}. En caso contrario la salida se efectuará por la salida estándar (usualmente la consola de comandos).

\item Si se especifica la opción --verbose o -v la salida contendrá, además del código MiniZinc, la estructura de la base de datos inferida a través del análisis del código SQL que la define: \cod{stcg --vervose} o \cod{stcg -v}

\end{itemize}

Para obtener el caso de prueba hay que resolver el modelo en código MiniZinc que proporciona STCG. Se puede hacer esto de las siguientes maneras:
\begin{itemize}
\item Ejecutando directamente el resolutor de MiniZinc sobre el fichero que contiene el código MiniZinc:
\cod{MiniZinc salida.mzn}
\item Transformando el código MiniZinc a código FlatZinc para resolverlo en cualquiera de los resolutores que lo implementan.
\cod{mzn2fzn salida.mzn} para transformarlo al archivo salida.fzn,
\cod{fz salida.fzn} para resolverlo, en este caso con el resolutor de FlatZinc que implementa Gecode\cite{Gecode} (requiere la instalación de Gecode).
\end{itemize}

\subsection{Todo en uno}

Presentamos el siguiente ejemplo para ejecutar los pasos anteriores con una sola línea en la consola de comandos:
\begin{footnotesize}\begin {verbatim} cat entrada.sql >> salida.sql; stcg -i entrada.sql -o salida.mzn; 
MiniZinc salida.mzn >> salida.sql \end{verbatim}\end{footnotesize}
Con esto conseguimos un archivo (salida.sql) que conforma el caso de prueba buscado incluyendo la definición de la base de datos y la inserción del caso de prueba obtenido en la misma.

\subsection{Dudas, sugerencias, problemas...}

Puede contactar con los desarrolladores de la herramienta para solventar dudas, hacer proposiciones respecto a la herramienta o comunicar comportamientos inesperados del programa. Si deseas comunicar un problema de la herramienta, por favor, incluye una explicación detallada de los pasos que reproducen el problema y toda la información adicional que pudiera ser de utilidad.

Contacto: jose.11.10.88(arroba)gmail.com y senrof21(arroba)gmail.com